const request=require('request')
const Router = require('koa-router')
const func = require('./functions')

module.exports=(io,config,users)=>{
    const router=new Router();
    router.all('/*',(ctx,next)=>{
        ctx.body='<h1 style="text-align:center;line-height:500px;font-size:100px;color:#f60;">欢迎光临</h1>';
        return next();
    })
    /**
     * 定时任务
     */
    router.post('/timing',(ctx,next)=>{
        let data=ctx.request.body;
        if(!func.checkToken(data)){
            return ctx.body=func.error('数据验证失败');
        }else{
            // 定时任务
            func.startTask(data)
        }
        return ctx.body=func.success('任务发布成功');
    })


    /**
     * 后台事件（该事件是发往后台管理中心的事件）
     * 管理中心接收到的数据为 ctx.request.body
     */
    router.post('/admin',(ctx,next)=>{
        let data=ctx.request.body;
        if(!func.checkToken(data)){
            return ctx.body=func.error('数据验证失败');
        }else{
            if(data.member_id){
                io.to(data.member_id.toString()+'admin').emit(data.event,data);
            }else{
                // 广播
                io.emit(data.event,data);
            }
        }
        return ctx.body=func.success('指令发布成功');
    })

    /**
     * 客户端事件（该事件是发往客户端的事件，通常为任务的发布）
     * 客户端接收到的数据为 ctx.request.body.data
     */
    router.post('/client',(ctx,next)=>{
        let data=ctx.request.body;
        if(!func.checkToken(data)){
            return ctx.body=func.error('数据验证失败');
        }
        if(data.member_id&&!data.device_id){ //该用户下所有设备
            io.to(data.member_id).emit(data.event,data.data);
        }else if(data.member_id&&data.device_id){ 
            //console.log(data.data)
            let _url=config.apiHost+"index/Api/getSoftBodyId.html";
            if(Array.isArray(data.device_id)){
                let device_ids=data.device_id,member_id=data.member_id;
                device_ids.forEach(item=>{
                    let socket_id=users.getSocketId(member_id,item);
                    if(socket_id){
                        if(data.data.device&&data.data.device.length>1&&data.data.software&&data.data.software.length){
                            request.get(_url,{
                                qs:{
                                    device_id:item,
                                    softids:data.data.software,
                                }
                            },(err,res)=>{
                                if(err){
                                    console.log(err)
                                }else{
                                    let _body=res.body||[];
                                    if(typeof _body==='string'){
                                        try{
                                            _body=JSON.parse(_body)
                                        }catch(e){
                                            console.err(e)
                                        }
                                    }
                                    data.data.software=_body;
                                    io.to(socket_id).emit(data.event,data.data);
                                }
                            })
                        }else{
                            io.to(socket_id).emit(data.event,data.data);
                        }
                        
                    }else{
                        // 未在线设备
                    }
                })
            }else{ //单设备发送
                let socket_id=users.getSocketId(data.member_id,data.device_id);
                if(socket_id){
                    if(data.data.device&&data.data.device.length>1&&data.data.software&&data.data.software.length){
                        request.get(_url,{
                            qs:{
                                device_id:data.device_id,
                                softids:data.data.software,
                            }
                        },(err,res)=>{
                            if(err){
                                console.log(err)
                            }else{
                                let _body=res.body||[];
                                console.log(_body)
                                if(typeof _body==='string'){
                                    try{
                                        _body=JSON.parse(_body)
                                    }catch(e){
                                        console.err(e)
                                    }
                                }
                                data.data.software=_body;
                                io.to(socket_id).emit(data.event,data.data);
                            }
                        })
                        
                    }else{
                        io.to(socket_id).emit(data.event,data.data);
                    }
                    
                }else{
                    // 未在线设备
                }
            }
            // 任务管理器更新数据(后台页面统一数据)
            io.to(data.member_id.toString()+'admin').emit('updateDev',{data:[data.device_id]});
        }else{ //广播
            io.emit(data.event,data.data);
        }
        return ctx.body=func.success('任务发布成功');
    })

    return router;
}